home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacHack 1996
/
MacHack 1996.toast
/
Presentations
/
Presentations ’91
/
MPW Stand-Alone Libraries
/
UMultiSegSA.p
< prev
next >
Wrap
Text File
|
1991-02-26
|
4KB
|
137 lines
{[a-,body+,h-,o=100,r+,rec+,t=4,u+,#+,j=20/57/1$,n+]}
{$D+}
UNIT UMultiSegSA;
INTERFACE
{--------------------------------------------------------------------------------------------------}
USES
{ • MacApp }
UMacApp,
{ • Building Blocks }
{ • Required for this unit's interface }
UAssociation,
{ • Implementation use }
CursorCtl, Signal, PasLibIntf, IntEnv, ErrMgr, Events, OSUtils, Memory,
Resources, Fonts, Packages, ToolUtils, Errors,
{ • Inherits from }
UMPWTool, UMakeSAGlobals, UMakeSA;
CONST
kCtorDtorSeg = '%_Static_Constructor_Destructor_Pointers';
kBSRSize = 4; { size of BRA instruction }
kSegTypeSize = 4; { size of segment type info }
kNumJTSize = 4; { size of numJTEntries }
kCode0Hdr = 16; { size of header at beginning of code 0 }
kCodeHdr = 4; { size of any code segment header }
kJTEntrySize = 8; { size of a jump table entry }
{ Start of the jump table; past the numJTEntries longword }
kJTStart = kBSRSize + kSegTypeSize + kNumJTSize;
kJTDivisor = 2; { normal jump table has 8 byte entries, our's is 4 bytes }
kBSRCode = $6100; { CPU instruction for BSR $xxxxxxxx }
TYPE
TMultiSegSA = OBJECT (TObject)
fSrcRefNum: Integer;
fDestRefNum: Integer;
fJTSize: LongInt;
fCtorJTSize: LongInt;
fDtorJTSize: LongInt;
fSegTabSize: LongInt;
fSACodeSize: LongInt;
fFileSpec: FileSpec;
fMainType: ResType;
fMainID: Integer;
fMainName: StringHandle;
fOtherType: ResType;
PROCEDURE TMultiSegSA.IMultiSegSA(aFile: FileSpec;
mainType: ResType;
mainID: Integer;
mainName: StringHandle;
otherType: ResType);
PROCEDURE TMultiSegSA.OpenFiles;
PROCEDURE TMultiSegSA.CloseSourceFile;
PROCEDURE TMultiSegSA.CloseDestinationFile;
PROCEDURE TMultiSegSA.ShowNumericalProgress(aStr: Str255;
aLong: LongInt);
PROCEDURE TMultiSegSA.ShowTextProgress(aStr: Str255);
FUNCTION TMultiSegSA.WillBeMerged(theID: Integer;
theName: Str255): BOOLEAN;
PROCEDURE TMultiSegSA.CalcJTSize(rawJTSize: LongInt);
PROCEDURE TMultiSegSA.CalcCtorJTSize(theSize: LongInt);
PROCEDURE TMultiSegSA.CalcDtorJTSize(theSize: LongInt);
PROCEDURE TMultiSegSA.CalcSegTableSize(theCount: Integer;
hasCtorDtorJT: Boolean);
PROCEDURE TMultiSegSA.CalcSACodeSize;
FUNCTION TMultiSegSA.GetNumJTEntries: LongInt;
FUNCTION TMultiSegSA.GetNumCtorJTEntries: LongInt;
FUNCTION TMultiSegSA.GetNumDtorJTEntries: LongInt;
FUNCTION TMultiSegSA.GetNumSegTableEntries: LongInt;
FUNCTION TMultiSegSA.GetJTSize: LongInt;
FUNCTION TMultiSegSA.GetCtorJTSize: LongInt;
FUNCTION TMultiSegSA.GetDtorJTSize: LongInt;
FUNCTION TMultiSegSA.GetSegTableSize: LongInt;
FUNCTION TMultiSegSA.GetSACodeSize: LongInt;
FUNCTION TMultiSegSA.GetCode0: Handle;
FUNCTION TMultiSegSA.GetCtorDtorJT: Handle;
FUNCTION TMultiSegSA.AllocateSACode(theSize: LongInt): Handle;
PROCEDURE TMultiSegSA.BuildBSR(code0, saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.BuildSegType(segType: ResType;
saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.BuildJumpTable(code0, saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.BuildCtorJTable(theJT, saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.BuildDtorJTable(theJT, saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.BuildSegTable(saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.Merge1Segment(segNum: Integer;
theCode: Handle;
codeSize: LongInt;
saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.MergeCodeSegments(saCode: Handle;
VAR saPos: LongInt);
PROCEDURE TMultiSegSA.AdjustMainJTable(saCode: Handle;
segOffset: LongInt;
oldSegNum, newSegNum, jtOffset, numEntries: Integer);
PROCEDURE TMultiSegSA.BuildStandAlone;
PROCEDURE TMultiSegSA.ReplaceSegment(theRsrc: Handle;
theType: ResType;
theID: Integer;
VAR theName: Str255);
PROCEDURE TMultiSegSA.AddMainSegment(VAR saCode: Handle);
PROCEDURE TMultiSegSA.AddOtherCodeSegments(saCode: Handle;
otherSegType: ResType);
PROCEDURE TMultiSegSA.DoIt;
END;
{--------------------------------------------------------------------------------------------------}
IMPLEMENTATION
{$I UMultiSegSA.incl.p}
END.